package br.unicamp.ft.sahp.model.dao.impl;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;

import br.unicamp.ft.sahp.model.dao.AbstractDAO;
import br.unicamp.ft.sahp.model.dao.QuestionarioDAO;
import br.unicamp.ft.sahp.model.entidades.Questionario;
import br.unicamp.ft.sahp.model.exception.QuestionarioNaoEncontradoException;
import br.unicamp.ft.sahp.utils.StringUtils;

@Repository
public class QuestionarioDAOImpl extends AbstractDAO<Questionario, Long>
		implements QuestionarioDAO {

	@Autowired
	public QuestionarioDAOImpl(
			@Qualifier("entityManagerFactory") EntityManagerFactory factory) {
		super(factory, Questionario.class);
	}

	public List<Questionario> findQuestionariosByNome(String nomeQuestionario)
			throws QuestionarioNaoEncontradoException {
		
		boolean temCondicoes = false;
		StringBuilder jpaql = new StringBuilder();
		List argumentosPesquisa = new ArrayList();

		jpaql.append("SELECT questionario FROM Questionario questionario ");
		
		// CAMPO NOME DO QUESTIONARIO
		if (!StringUtils.isNuloOuBranco(nomeQuestionario)) {
            temCondicoes = true;
            jpaql.append(" WHERE ");
            jpaql.append("UPPER(questionario.descricaoQuestionario) LIKE '%' || UPPER(?) || '%'");
            argumentosPesquisa.add(nomeQuestionario);
		}
		
		// Armazena resultados
		List<Questionario> listaQuestionarios = getJpaTemplate().
					find(jpaql.toString(), argumentosPesquisa.toArray());
		
		if (listaQuestionarios == null || listaQuestionarios.isEmpty()) {
			throw new QuestionarioNaoEncontradoException();
		}
		
		return listaQuestionarios;
	}
	
	public List<Questionario> findAllQuestionarios() throws QuestionarioNaoEncontradoException {
		String consulta = "SELECT questionario FROM Questionario questionario";
		Query query = getEntityManager().createQuery(consulta);
		List<Questionario> listaResultados = query.getResultList();
		
		if (listaResultados == null || listaResultados.isEmpty()) {
			throw new QuestionarioNaoEncontradoException();
		}
		
		return listaResultados;
	}
}